/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * $Id$ ICatalogServiceLocal.java
 * Universidad de los Andes (Bogotá - Colombia)
 * Departamento de Ingeniería de Sistemas y Computación
 * Licenciado bajo el esquema Academic Free License version 2.1
 *
 * Ejercicio: Muebles los Alpes
 * Autor: German Sotelo
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package com.losalpes.catalogo.servicios;

import com.losalpes.catalogo.entities.Mueble;
import com.losalpes.catalogo.entities.Promocion;
import com.losalpes.catalogo.excepciones.InvalidDataException;
import java.util.List;
import javax.ejb.Local;

/**
 * Contrato funcional de los servicios ofrecidos para el manejo del catálogo de productos.
 * Estos métodos son expuestos de manera local para ser usados por la capa de presentaciòn.
 * @author German Sotelo
 */
@Local
public interface ICatalogServiceLocal {

    /**
     * Retorna la lista de todos los muebles que se encuentran registrados en el sistema.
     * @return list. Lista de todos los muebles que se encuentran registrados en el sistema.
     */
    public List<Mueble> findAll();

    /**
     * Crea una nueva instancia de Mueble y la retorna.
     * @return vendedor. Nueva instancia de Mueble.
     */
    public Mueble newMueble();

    /**
     * Modifica un mueble dentro de la persistencia del sistema.
     * @return Mueble. Objeto modificado de la instancia de mueble que se modificó.
     */
    public Mueble createOrUpdate()throws InvalidDataException;

    /**
     * Retorna un Mueble dada su referencia.
     * @param id. referencia único del mueble.
     * @return mueble. Mueble cuya referencia corresponde con el parametro.
     */
    public Mueble findByIdentificacion(java.lang.String id);

    /**
     * Permite eliminar un mueble de la persistencia del sistema.
     */
    public void delete();

    /**
     * Retorna el mueble actual.
     * @return mueble. Mueble actual.
     **/
    public com.losalpes.catalogo.entities.Mueble getMueble();

    /**
     * Permite asignar el mueble actual.
     * @param id. Identificador de nuevo mueble actual.
     * @return mueble. Nuevo mueble actual.
     **/
    public void setMueble(Mueble mueble);

    public void addPromocion(Mueble mueble, Promocion promocion);
}
